package com.mondo.financialwallet.data;


import com.mondo.financialwallet.data.entity.BasisResponseEntity;
import com.mondo.financialwallet.data.entity.CheckMessageCodeResultEntity;
import com.mondo.financialwallet.data.entity.ClearProductDetailsEntity;
import com.mondo.financialwallet.data.entity.FeedbackResponseEntity;
import com.mondo.financialwallet.data.entity.FindEntity;
import com.mondo.financialwallet.data.entity.GoogleValidatorEntity;
import com.mondo.financialwallet.data.entity.HoldProductDetailsEntity;
import com.mondo.financialwallet.data.entity.HoldProductListEntity;
import com.mondo.financialwallet.data.entity.HoldProductProfitDataEntity;
import com.mondo.financialwallet.data.entity.MobilePrefixEntity;
import com.mondo.financialwallet.data.entity.MyTokenListEntity;
import com.mondo.financialwallet.data.entity.ProductDetailsEntity;
import com.mondo.financialwallet.data.entity.ProductListEntity;
import com.mondo.financialwallet.data.entity.ProductOrderListEntity;
import com.mondo.financialwallet.data.entity.SingleHoldProductProfitDataEntity;
import com.mondo.financialwallet.data.entity.TokenAddressEntity;
import com.mondo.financialwallet.data.entity.TokenTransactionRecordEntity;
import com.mondo.financialwallet.data.entity.UserAssetsEntity;
import com.mondo.financialwallet.data.entity.UserInfoEntity;
import com.mondo.financialwallet.data.entity.VersionUpdateEntity;
import com.mondo.financialwallet.data.entity.WalletAssetEntity;
import com.mondo.financialwallet.presentation.model.LoginUserInfoModel;
import com.mondo.financialwallet.data.params.FeedbackParams;
import com.mondo.financialwallet.data.params.LoginParams;
import com.mondo.financialwallet.data.params.RegisterParams;
import com.mondo.financialwallet.data.params.ResetPasswordParams;
import com.mondo.financialwallet.data.params.SendMessageParams;
import com.mondo.financialwallet.data.params.TokenTransferParams;

import java.io.File;

public interface DataSource {

    interface DataCallback<T> {
        void onResult(T result);
    }

    void modifyAvatar(File avatar, DataCallback<BasisResponseEntity> callback);

    void versionUpdate(DataCallback<VersionUpdateEntity> callback);

    void customerFeedback(FeedbackParams params, DataCallback<FeedbackResponseEntity> callback);

    void holdProductList(DataCallback<HoldProductListEntity> callback);

    void holdProductDetails(String orderNumber, DataCallback<HoldProductDetailsEntity> callback);

    void clearProductDetails(String orderNumber, DataCallback<ClearProductDetailsEntity> callback);

    void holdProductProfitData(String orderNumber, DataCallback<HoldProductProfitDataEntity> callback);

    void findDAppList(DataCallback<FindEntity> callback);

    void productOrderList(DataCallback<ProductOrderListEntity> callback);

    void googleValidator(DataCallback<GoogleValidatorEntity> callback);

    void bindGoogleValidator(String code, DataCallback<BasisResponseEntity> callback);

    void clearProduct(String orderNumber, String code, DataCallback<BasisResponseEntity> callback);

    void userInfo(DataCallback<UserInfoEntity> callback);

    void userAssets(DataCallback<UserAssetsEntity> callback);

    void myTokenList(DataCallback<MyTokenListEntity> callback);

    void productList(DataCallback<ProductListEntity> callback);

    void walletAsset(DataCallback<WalletAssetEntity> callback);

    void walletAssetAvailable(DataCallback<WalletAssetEntity> callback);

    void tokenAddress(String tokenId, DataCallback<TokenAddressEntity> callback);

    void sendMessageByUser(String mobileNumber, DataCallback<BasisResponseEntity> callback);

    void checkMessageCodeResult(
            String mobileNumber, String code, DataCallback<CheckMessageCodeResultEntity> callback
    );

    void alterPassword(ResetPasswordParams params, DataCallback<BasisResponseEntity> callback
    );

    void generateFinancingOrders(
            String goodsId, String amount, DataCallback<BasisResponseEntity> callback
    );

    void mobilePrefix(DataCallback<MobilePrefixEntity> callback);

    void alterNickname(String nickname, DataCallback<BasisResponseEntity> callback);

    void login(LoginParams params, DataCallback<LoginUserInfoModel> callback);

    void register(RegisterParams params, DataCallback<BasisResponseEntity> callback);

    void productDetails(String id, DataCallback<ProductDetailsEntity> callback);

    void sendMessageCode(SendMessageParams params, DataCallback<BasisResponseEntity> callback);

    void transfer(TokenTransferParams params, DataCallback<BasisResponseEntity> callback);

    void tokenTransactionRecord(
            int page, String tokenId, String income, DataCallback<TokenTransactionRecordEntity> callback
    );

    void bindNewMobileNumber(
            String mobile, String code, String prefix, DataCallback<BasisResponseEntity> callback
    );

    void bindEmail(String email, String code, DataCallback<BasisResponseEntity> callback);

    void alterLoginPassword(
            String oldPassword, String newPassword, String code, DataCallback<BasisResponseEntity> callback
    );

    void singleHoldProductProfitData(
            String orderNumber, DataCallback<SingleHoldProductProfitDataEntity> callback
    );
}